Skip to content

Add aarch64 support for Omarchy 3.x - #1897

Closed
jondkinney wants to merge 185 commits into
omacom:devfrom
jondkinney:amarchy-3-x
Closed

Add aarch64 support for Omarchy 3.x#1897
jondkinney wants to merge 185 commits into
omacom:devfrom
jondkinney:amarchy-3-x

Conversation

@jondkinney

@jondkinney jondkinney commented Sep 23, 2025

Copy link
Copy Markdown
Contributor

Building upon what @nilszeilon did in #876 this reworks things quite a bit, especially around the initial user creation to help folks on a new asahi-alarm m1/m2 install (or fresh parallels VM created through archboot) get their non-root user created so we can execute the omarchy install automatically as that new user.

The changes include architecture detection, platform-specific package management, bootloader configuration, and custom binary handling for aarch64.

TL;DR;

It should work on any new aarch64 VM (tested with Parallels and VMware) as well as Asahi-Alarm for m1/m2 macs.

On a VM

Get the parallels or vmware images with wget & sudo installed (or install Arch on your own VM w/ the necessary deps). Both of these downloads are good through May 9th 2026. If you need a new one after that, ping me and I can try to help.

Once your VM is booted, if you're using Parallels, choose "Install Parallels Tools" from the "Action" menu. If you're using VMware you do not have to manually initiate any VMware Tools installation, it's fully automated.

Finally after logging into the VM as root execute the wget command below 👇 Protip: that wget url should be in the bash history of both VMs if you press the up arrow on the keyboard a few times.

wget -qO- https://raw.githubusercontent.com/jondkinney/armarchy/amarchy-3-x/boot.sh | OMARCHY_REPO=jondkinney/armarchy OMARCHY_REF=amarchy-3-x bash

If you want to type in a shorter url, this shortlink will expand to the above: curl -fsSL hdwy.link/armarchy-3-x | bash you can inspect it by omitting the | bash first if you like which will just print the text it's going to pipe to bash.

On Asahi Alarm (for M1/M2 Macs)

Do the install from within macOS (IMPORTANT: choose the minimal option when prompted) once complete, it'll have you reboot into Arch. Log in as the root user (password: root).

Next, setup wifi with: nmcli device wifi connect <SSID> password <password> then install wget with pacman -S wget and finally, manually type the wget command above ☝️ noting the (accidental) difference between the fork name "aRmarchy" and branch name "amarchy" without the "r" (sorry about that!).

Note: I've generally not had a problem with installing over wifi when testing Asahi-Alarm on my M1 Max MacBook Pro w/ 32gb RAM, but YMMV. Use ethernet for a more stable experience.

Key Features

  • Full ARM64 architecture support for both virtualized environments (Parallels) and bare metal (Asahi Linux)
    • It probably would work on a Pi, too?
  • Automatic architecture detection with special handling for Asahi Linux systems
  • Platform-specific package management with fallback strategies for (some) missing ARM packages

Major Changes

1. Architecture Detection & Environment Setup

  • Early detection of ARM architecture (aarch64/arm64) in install.sh
  • Asahi Linux detection through multiple methods (OS release, kernel name, installed packages)
  • Environment variables (OMARCHY_ARM, ASAHI_ALARM) for conditional logic throughout installation

2. Package Management

Repository Configuration

  • ARM-specific pacman configuration (pacman.conf.arm) with:
    • Arch Linux ARM repositories (core, extra, alarm, aur)
    • Asahi Linux ARM repository for Apple Silicon specific packages
    • Disabled multilib (not available on ARM)
    • Omarchy repository placeholder (currently unavailable for ARM)
  • Custom mirrorlists:
    • mirrorlist.arm for Arch Linux ARM mirrors
    • mirrorlist.asahi-alarm for Asahi-specific packages

Package Installation Strategy

  • Split package lists:
    • omarchy-base.packages: Cross-platform packages
    • omarchy-arm.packages: ARM-specific requirements
    • omarchy-x86.packages: x86_64-only packages
  • Yay AUR helper installed on ARM for packages not in official repos
  • Custom installation scripts for ARM packages unavailable through standard channels

3. Audio System Configuration

  • Critical pipewire-jack installation in preflight to prevent jack2 conflicts
  • Asahi audio support with asahi-audio package
  • DRM content support via widevine from asahi-alarm repository
  • Custom manual bild of the Omarchy microfork of Chromium to support widevine

4. Application Support

Custom ARM Installations

  • 1Password: Direct download and installation from official ARM64 tarball
  • Obsidian: ARM64 AppImage installation with desktop integration
  • Omarchy Chromium: Custom ARM64 build (v139.0.7258.154-2) with widevine support
  • Omarchy LazyVim: Built from source for ARM compatibility (no arm omarchy mirror avail)
  • Walker: Prebuilt ARM64 binary to avoid long compilation times (and lock to currently included x86 version)
  • ASDControl: Prebuilt ARM64 binary for Apple Silicon display control

Vulkan Configuration

  • Walker compatibility fix: Added Vulkan ICD configuration for ARM64 (VK_ICD_FILENAMES environment variable)
    • Note from jon: @nilszeilon recently added this, it may work, but may also install too new of a version through yay? I'm hard-coding the prebuild walker binary for now, but this could prove useful in the future.

5. Bootloader Configuration

Limine Support

  • ARM64 Limine bootloader support with:
    • BOOTAA64.EFI installation for UEFI ARM systems
    • Architecture-aware kernel detection (uses Image instead of vmlinuz)
    • Modified mkinitcpio hooks (no microcode on ARM)
    • Automatic skip for Asahi Linux (uses U-Boot)
    • Also skip for VMware (for now) since VMware can't find the config file for some reason.
      • I hope to fix this in the future

Boot Configuration

  • Conditional bootloader setup based on platform:
    • x86_64: Standard Limine with microcode, UKI support
    • ARM64 (non-Asahi): Limine without microcode
    • Asahi Linux: Skip Limine installation (U-Boot managed)
    • VMware: Skip Limine installation (for now)

6. Virtual Machine Detection

  • Screensaver disabled in virtual machines through hypridle configuration
  • systemd-detect-virt integration to detect VM environments

7. Helper Scripts Updates

Updated Scripts

  • omarchy-refresh-pacman-mirrorlist: Architecture-aware mirrorlist selection
  • omarchy-snapshot: Architecture-specific restoration tools
  • omarchy-limine-update: ARM64 kernel detection support, updates limine.conf automatically.

New Scripts

  • limine-arm64.sh: ARM64-specific Limine installation
  • Multiple ARM installation scripts in install/arm_install_scripts/

8. Error Handling & Compatibility

Graceful Degradation

  • mkinitcpio warnings: Continue on non-fatal warnings (missing fsck helpers, for example)
  • Package availability: Fallback strategies for missing ARM packages
  • Binary compatibility: Prebuilt binaries for performance-critical applications

Platform-Specific Fixes

  • Yaru icon cache: Manual update required on ARM
  • Build dependencies: Handled through temporary yay installation

Testing Environments

  • Arch Linux ARM in Parallels Desktop VMs
  • Arch Linux ARM in VMware Desktop VMs
  • Asahi Linux ARM on Apple Silicon Macs (M1/M2)
    • Dual boot required, on Limine, only U-Boot.
  • Fresh installations via archboot ISO

Migration Notes

  • Existing x86_64 installations are unaffected
  • ARM support is automatically detected and configured
  • No manual intervention required for standard installations as a root user after account / user details are entered.
    • Does support choosing an existing non-root user if one is detected!
    • Also has checks to ensure required data is provided and valid (first name, last name, email)
    • Allows quitting the script with ctrl+c

Future Improvements

  • Omarchy repository support for ARM64 packages (pending) cc: @dhh @ryanrhughes
  • Native ARM builds for currently prebuilt binaries
  • Additional ARM-specific optimizations

##Breaking Changes

None (hopefully) - all changes are intended to be additive and maintain backward compatibility with existing x86_64 installations. At least, that's the goal.

Dependencies

  • Arch Linux ARM or Asahi Linux ARM base system
  • Standard Arch Linux ARM repositories
  • Asahi Linux ARM repository (for Apple Silicon systems)

Install Video

Here's a video showing the full install process. If you slow it down to 0.25x you can scrub around to a point of interest and sort of see what's going on.

https://share.cleanshot.com/rmD5JKqY

CleanShot 2025-09-23 at 15 21 50@2x

Fin!

And with any luck, you'll be greeted with a lovely Tokyo Night!

CleanShot 2025-09-23 at 15 22 52@2x

VMware vs Parallels

When installing to VMware, we automatically add the Open VMware Tools. Note that currently the clipboard does not synchronize even with VMware Tools properly installed.

We also have to add some env vars on VMware to allow Hyprland to load properly. However, note that this likely performs worse than parallels because it's doing all of the rendering through software instead of using any discrete GPU capabilities. I think Parallels uses some discrete GPU because these settings are not necessary for it to work on Parallels. So I'd recommend Parallels, but VMware is free, so choose what you want.

env = WLR_NO_HARDWARE_CURSORS,1
env = WLR_RENDERER_ALLOW_SOFTWARE,1
env = WLR_RENDERER,pixman
env = __GLX_VENDOR_LIBRARY_NAME,mesa
env = LIBGL_ALWAYS_SOFTWARE,1

You also need to enable 3d acceleration in VMware (this is already done in the provided download image)

Parallels Tools

We handle the VMware tools automatically, but we can't do the same for Parallels. It's pretty simple though, the installer will error out and tell you what to do if you don't have the Parallels Tools mounted. The easiest path is to just choose "Install Parallels Tools" from the "Action" menu before running the Omarchy wget install command. The installer will take it from there!

With Parallels Tools installed, make sure you set two critical settings to have the best experience. The first one at the Parallels Desktop preferences level, the second one at the VM configuration level.

This ensures that command (super) + space will work inside of the VM and not trigger the macOS spotlight shortcut.

This allows for the mouse to flow in/out of the VM window (if you're not in full screen) without having to manually release the mouse cursor by pressing ctrl + option.

@jondkinney
jondkinney force-pushed the amarchy-3-x branch 10 times, most recently from b9e8f0a to 09e6b4a Compare September 23, 2025 18:48
Comment thread bin/omarchy-limine-update

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This script is necessary because limine-update and limine-snapper-sync don't work on arm, so I had to re-create what they do in bash, directly. This will write out a new limine.conf and I have another changeset that will introduce full kernel backup and restore which could be used universally instead of the java tooling that limine currently has (which again, isn't ARM compatible). But I didn't want to overdo this PR. If we need to trim some of this file back and save it for the other full featured limine sync replacement, LMK. But it's guarded in here, so could be staged for now.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The OMARCHY_ARM env var is currently only exported during install, so we fall back to uname -m here for a more raw ARM detection.

Comment thread bin/omarchy-snapshot
if [ -n "$OMARCHY_ARM" ]; then
# ARM64: Use bash implementation with kernel versioning
echo -e "\e[32mRestoring snapshot with kernel versioning (ARM64)...\e[0m"
sudo "${OMARCHY_PATH}/bin/omarchy-limine-snapper-restore"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another bash re-write that effectively does the same thing. Not yet included in this PR. Planning to follow up with a separate one, but could include here, too, LMK.

Comment thread config/hypr/hypridle.conf
listener {
timeout = 150 # 2.5min
on-timeout = pidof hyprlock || omarchy-launch-screensaver # start screensaver (if we haven't locked already)
on-timeout = pidof hyprlock || ([[ "$(systemd-detect-virt)" == "none" ]] && omarchy-launch-screensaver) # start screensaver (if we haven't locked already)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't turn on screen saver in VMs...the host has a screen saver

## Asahi Linux ARM repository mirrorlist
## Generated for Omarchy on Apple Silicon Macs

Server = https://github.com/asahi-alarm/asahi-alarm/releases/download/$arch

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We actually need this for parallels DRM audio to work, too, not just m1/m2 macs... kind of annoying 🤷

Comment thread default/pacman/pacman.conf.arm Outdated
Comment thread install.sh
# This must be in the main shell since run_logged() executes scripts in subshells
arch=$(uname -m)
if [[ "$arch" == "aarch64" || "$arch" == "arm64" ]]; then
export OMARCHY_ARM=true

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to export here for subshells from install.sh (as noted in the comment inline as well)

Comment thread install/arm_install_scripts/binaries/walker-arm64 Outdated
Comment thread install/arm_install_scripts/omarchy-chromium-arm64.sh Outdated
Comment thread install/arm_install_scripts/omarchy-lazyvim.sh Outdated
Comment thread install/arm_install_scripts/walker-prebuilt.sh

@jondkinney jondkinney Sep 23, 2025

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the new GUM based user prompt to bootstrap a non-root user from within a root user session. You can see it in action in the video. Open to thoughts/changes here, but I did try to make it pretty robust/fault tolerant, and with validations for non blank / only spaces input, as well as a lightweight regex based email validation.

Comment thread install/helpers/logging.sh Outdated
Comment thread install/helpers/logging.sh Outdated

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was not worth trying to do this conditionally in-line with the limine-snapper.sh file. I tried! This is better.

Comment thread install/login/limine-snapper.sh Outdated
Comment thread install/packaging/arch.sh
# Update icon cache for yaru-icon-theme (needed on ARM)
if [ -d "/usr/share/icons/Yaru" ]; then
echo "Updating Yaru icon cache for ARM..."
sudo gtk-update-icon-cache /usr/share/icons/Yaru

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure why this is necessary, but it didn't work without it previously.

@bnferguson

Copy link
Copy Markdown

Just saw this PR as I was working on getting my Asahi Alarm setup working with Omarchy (using your and @nilszeilon's older branches) but running into issues. Switched to this with a half broken setup and it seems to have sorted it out. Still early days as I just booted into Hyprland, but looking very favorable even for a system in a strange state. Great work! 🙌

(Oh yeah, M1 MacBook Air here)

@neosepulveda

neosepulveda commented Sep 24, 2025

Copy link
Copy Markdown

Brilliant work! @jondkinney
This is going bring a bell of a lot of people to Omarchy.

Am I correct here by saying that the idea is that bare metal users install Asahi Alarm with minimal installation first and then wget the omarchy installation script like in the @nilszeilon 's discussion page?

@jondkinney jondkinney mentioned this pull request Sep 24, 2025
jondkinney and others added 24 commits April 19, 2026 20:09
run_logged uses bash -c which creates a fresh shell that doesn't
inherit the parent's set -eEo pipefail, so each script needs its own
set -e to catch failures like transient 502 errors.
zram compressed swap is better for Pi (avoids SD/eMMC wear), faster than
disk I/O, and eliminates btrfs NOCOW workarounds. Standardizes swap config
across Asahi, ARM VMs, and Raspberry Pi using systemd-zram-generator.
Migrates existing Pi swap files on upgrade.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix incorrect reboot and shutdown commands in System menu
Add direct substitutions for hyprland-preview-share-picker and wayfreeze.
Add custom installer mappings for omarchy-walker, nvim, and dotnet-runtime-9.0.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The bundled walker-arm64 binary (v2.13.0) crashes on systems with newer
GTK4/glib2 due to ABI incompatibility, and causes pacman file conflicts
when later updated via AUR.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
No longer uses a pre-built binary, so the name was misleading. Updated
all references in arch.sh, arm-aur.packages, and the check script.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix wrong variable name in base.sh x86 AUR install path
- Remove duplicate pacman-key and redundant pacman -Syyuu in preflight
- Remove early base-devel install (already installed later with with_yes)
- Replace seq with pure-bash loop in with_yes helper
- Use daemon-reload instead of daemon-reexec in vmware-tools
- Fix missing space in docs example command

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Using export leaked MESA_LOADER_DRIVER_OVERRIDE, VK_ICD_FILENAMES, and
__GLX_VENDOR_LIBRARY_NAME into every child process launched from the
terminal. Apps like OBS and Kdenlive that need Vulkan would crash or
fall back to software rendering. Using exec env scopes the vars to
only the Ghostty process.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
On Wayland, fcitx5 uses the Wayland input method protocol directly.
QT_IM_MODULE forces Qt apps to load libfcitx5platforminputcontextplugin.so
which has a SIGBUS bug on aarch64.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The signal-desktop-beta PKGBUILD now depends on fpm (AUR) and
libxcrypt-compat (removed from official repos, now AUR-only).
Without pre-installing these, makepkg -s fails because pacman
can't resolve AUR packages. Also explicitly install nodejs-lts-jod
and pnpm from official repos before the build.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
libxcrypt-compat is in the core repo, not AUR. Installing it via
omarchy-aur-install caused a build failure since it tried to compile
from AUR source instead of using the official package.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
OBS upstream hasn't merged FFmpeg 8 support yet (obsproject/obs-studio#12534).
FFmpeg 8.x recently landed in Arch repos, breaking the obs-studio-git build.
Rather than blocking the entire installation, warn and continue so OBS can
be installed later once upstream is fixed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The obs-studio-git PKGBUILD has been restructured significantly:
- Source arrays are now built in _source_main()/_source_cef() functions
- libvpl (Intel VPL) added to depends (x86-only, breaks ARM)
- ffnvcodec-headers added to makedepends (x86-only)
- Old sed patterns for source/sha256sums no longer matched

Updated approach:
- Remove _source_cef function call entirely (not just source entries)
- Remove x86-only deps (libvpl, ffnvcodec-headers) from PKGBUILD
- Pre-install full ARM-compatible dependency set matching PKGBUILD
- Verify FFmpeg is findable via pkg-config before building
- Add aarch64 to supported architectures

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
pipewire-jack is already installed and provides 'jack'. Installing
jack2 explicitly causes a package conflict. The PKGBUILD's 'jack'
dependency is already satisfied by pipewire-jack.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Thanks to Vaxry and Ryan (hyooz) for helping fix this at the Omacon
after party!
New bin/ script that installs a libinput quirk tagging the keyd
virtual keyboard as AttrKeyboardIntegration=internal. Without this,
libinput's disable-while-typing does not fire when keyd is running,
because keyd grabs the physical keyboard via EVIOCGRAB and re-emits
events through a userspace virtual device that libinput defaults to
external.

The quirk is scoped tightly to MatchName='keyd virtual keyboard' so
real external USB keyboards are not affected. The script is
idempotent (uses begin/end markers to detect prior installs), runs
libinput quirks validate, and is a no-op when keyd isn't installed.
Previously bin/omarchy-install-libinput-keyd-quirk regenerated the
quirks file from an inline heredoc and gated install on keyd being
already present — but users usually install keyd AFTER cloning
omarchy-arm, so the gate made the script a no-op at bootstrap time.

Restructure so the quirks file is a tracked source file in the repo
and gets copied to /etc/libinput/local-overrides.quirks during the
normal arm install flow, whether or not keyd is present. The shipped
quirk matches by device name (keyd virtual keyboard) so it's inert
on systems without keyd — if keyd is installed later, the existing
/etc file takes effect on the next session with no further setup.

- default/libinput/local-overrides.quirks  new, source of truth
- install/arm_install_scripts/libinput-quirks.sh  copies source → /etc
- install/packaging/arch.sh  sources the new install step
- bin/omarchy-install-libinput-keyd-quirk  now a thin wrapper around
  the install script (for re-applying on existing installs)
Parallels on Apple Silicon exposes the host device tree to the guest,
so /sys/firmware/devicetree/base/compatible contains "apple" even
inside VMs. This caused ASAHI_ALARM to be set on Parallels ARM VMs,
which then prevented OMARCHY_VIRTUALIZATION from being set and
triggered Asahi-only install steps like libinput quirks.

Wrap the Asahi detection with systemd-detect-virt so it only fires
on bare metal.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The quirks file is tracked in the repo and known-good. Validation
required libinput-tools which isn't installed and isn't worth adding
as a dependency just for a one-time check on a static file.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 88 out of 110 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

## Asahi Linux ARM repository mirrorlist
## Generated for Omarchy on Apple Silicon Macs

Server = https://github.com/asahi-alarm/asahi-alarm/releases/download/$arch

Copilot AI Apr 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This mirror entry doesn’t look like a valid pacman repository URL: it’s missing $repo in the path, and GitHub release downloads generally require a tag name and full asset path. As written, pacman will 404 when trying to download databases/packages. Update this to the correct Asahi-ALARM repo base URL format (including $repo and $arch) and verify pacman -Sy works against it.

Copilot uses AI. Check for mistakes.
Comment on lines +51 to 54
# Use bash built-in read with timeout instead of external sleep command
# This prevents "command not found" errors when coreutils is being upgraded
read -t 0.1 -N 1 2>/dev/null || true
done

Copilot AI Apr 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The background log monitor replaces sleep with read -t 0.1 -N 1, but that reads from the process’s stdin and can consume user keystrokes intended for later interactive prompts (gum), especially when running in a real TTY. Use sleep (preferred), or redirect read from /dev/null/another fd so it can’t drain interactive input.

Copilot uses AI. Check for mistakes.
Comment on lines +128 to +147
echo "Creating EFI boot entry..."
DISK=$(findmnt -n -o SOURCE /boot | sed 's/p\?[0-9]\+$//')
PART=$(findmnt -n -o SOURCE /boot | grep -o 'p\?[0-9]\+$' | sed 's/^p//')

# Check if Limine entry already exists
if ! efibootmgr | grep -q "Limine"; then
sudo efibootmgr --create --disk "$DISK" --part "$PART" --label "Limine" --loader '\EFI\BOOT\BOOTAA64.EFI'
echo "Created Limine boot entry"
else
echo "Limine boot entry already exists"
fi

echo "Setting Limine as default boot option..."
LIMINE_NUM=$(efibootmgr | grep "Limine" | cut -c5-8)
if [[ -n "$LIMINE_NUM" ]]; then
CURRENT_ORDER=$(efibootmgr | grep "^BootOrder:" | cut -d: -f2 | sed 's/ //g')
# Remove Limine from current order if it exists
NEW_ORDER=$(echo "$CURRENT_ORDER" | sed "s/$LIMINE_NUM,//g" | sed "s/,$LIMINE_NUM//g" | sed "s/$LIMINE_NUM//g")
# Put Limine first
sudo efibootmgr --bootorder "$LIMINE_NUM${NEW_ORDER:+,$NEW_ORDER}"

Copilot AI Apr 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This script uses efibootmgr to create/update EFI boot entries, but it never ensures the efibootmgr package is installed. On minimal ARM installs this is likely missing, and with errexit enabled the install will abort with command not found. Install efibootmgr as part of the Limine setup (or guard these steps and skip boot entry creation when it’s unavailable).

Copilot uses AI. Check for mistakes.
@neurotroph

neurotroph commented Jun 3, 2026

Copy link
Copy Markdown

Used your modifications, @jondkinney, to install Omarchy 3.8.2 yesterday in Parallels Desktop on Apple M2 Pro (MacBook Pro). Had archboot to bootstrap a minimal Arch Linux ARM installation and used the provided shell script from your repo. Installation worked fine after some back-and-forth with Claude. Three observations which might be relevant before merging becomes possible:

  1. Had an issue installing omarchy-nvim: omarchy-nvim.sh: line 45: cd: omarchy-pkgs/pkgbuilds/edge/omarchy-nvim: No such file or directory. → Reason was that omarchy-pkgs repository has seemingly been reorganized, so the path had to be changed to omarchy-pkgs/pkgbuilds/omarchy-nvim
  2. For signal-desktop-beta there was a conflict in dependency resolution, because nodejs-lts-jod (Node 22) was already installed and nodejs-lts-krypton (Node 24) was required. → Solved this by removing signal-desktop-beta from the scripts, but possibly needs investigation whether Node 22 was installed through archboot (unlikely) or a previous build in the installation script.
  3. Limine was unresponsive on reboot with countdown stuck at "3" and no inputs being recognized. Resetting the VM repeatedly somehow solved the issue.
  4. First boot went into recovery shell with error ERROR: Failed to mount 'UUID=...' on real root. Mounting /dev/sda3 to /new_root and exiting recovery shell worked. blkid did in fact provide the exact same UUID, so this could be a problem with how archboot installed the system and bootloader. (Addendum: The issue persists with every boot. I am still trying to understand where I have to change limine configs (?)).

Hope this helps to move this topic forward!

@dhh

dhh commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Closing since this targets the pre-Quattro architecture and can no longer be applied to the current codebase. If the underlying idea is still relevant after Quattro, it can be proposed again against the new implementation. Thanks for the contribution!

@lewandowski96

Copy link
Copy Markdown

Hi @jondkinney any chance if you can upload a new VM image? old links are expired :(

@birkskyum

birkskyum commented Aug 27, 2026

Copy link
Copy Markdown

At least parts of this work/roadmap now exist i

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.